home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 4
/
Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso
/
Pearls
/
dev
/
Oberon
/
OberonV4
/
system
/
AmigaIFFParse.Mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1996-03-19
|
8KB
|
201 lines
Syntax20b.Scn.Fnt
ParcElems
Alloc
Syntax24b.Scn.Fnt
Syntax10.Scn.Fnt
Syntax10b.Scn.Fnt
FoldElems
(* AMIGA *)
MODULE AmigaIFFParse; (* Ralf Degner 25.07.1995 *)
IMPORT
SYSTEM, AmigaBase, AmigaExec, Amiga;
CONST
read*= {}; write*= {0}; rwBits*= read+write; fSeek*= {1}; rSeek*= {2};
parseScan*= 0; parseStep*= 1; parseRawStep*= 2;
sizeUnknown*= -1;
IFFHandlePtr*= POINTER TO IFFHandle;
IFFHandle*= RECORD
stream*: LONGINT;
flgas*: SET;
depth*: LONGINT;
END;
ContextNodePtr*= POINTER TO ContextNode;
ContextNode*= RECORD(AmigaExec.MinNode)
id*: LONGINT;
type*: LONGINT;
size*: LONGINT;
scan*: LONGINT;
END;
StoredPropertyPtr*= POINTER TO StoredProperty;
StoredProperty*= RECORD
size*: LONGINT;
data*: LONGINT;
END;
IOClipReqPtr*= POINTER TO IOClipReq;
IOClipReq*= RECORD
device*: AmigaExec.DevicePtr;
unit*: LONGINT;
command*: INTEGER;
flags*: SHORTINT;
error*: SHORTINT;
actual*: LONGINT;
length*: LONGINT;
data*: LONGINT;
offset*: LONGINT;
clipID*: LONGINT;
END;
ClipboardHandlePtr*= POINTER TO ClipboardHandle;
ClipboardHandle*= RECORD
cbport*: AmigaExec.MsgPort;
satisfyPort*: AmigaExec.MsgPort;
END;
CollectionItemPtr*= POINTER TO CollectionItem;
CollectionItem*= RECORD
next*: CollectionItemPtr;
size*: LONGINT;
data*: LONGINT;
END;
IFFLib: LONGINT;
D: AmigaBase.Regs;
PROCEDURE AllocIFF*(): IFFHandlePtr;
BEGIN
AmigaBase.LibCall(IFFLib, -30, D);
RETURN SYSTEM.VAL(IFFHandlePtr, D.d[0])
END AllocIFF;
PROCEDURE OpenIFF*(iff: IFFHandlePtr; modes: SET): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=SYSTEM.VAL(LONGINT, modes);
AmigaBase.LibCall(IFFLib, -36, D);
RETURN D.d[0]
END OpenIFF;
PROCEDURE ParseIFF*(iff: IFFHandlePtr; control: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=control;
AmigaBase.LibCall(IFFLib, -42, D);
RETURN D.d[0]
END ParseIFF;
PROCEDURE CloseIFF*(iff: IFFHandlePtr);
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -48, D)
END CloseIFF;
PROCEDURE FreeIFF*(iff: IFFHandlePtr);
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -54, D)
END FreeIFF;
PROCEDURE ReadChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.a[1]:=buf;
D.d[0]:=num;
AmigaBase.LibCall(IFFLib, -60, D);
RETURN D.d[0]
END ReadChunkBytes;
PROCEDURE WriteChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.a[1]:=buf;
D.d[0]:=num;
AmigaBase.LibCall(IFFLib, -66, D);
RETURN D.d[0]
END WriteChunkBytes;
PROCEDURE PushChunk*(iff: IFFHandlePtr; type, id, size: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=type; D.d[1]:=id; D.d[2]:=size;
AmigaBase.LibCall(IFFLib, -84, D);
RETURN D.d[0]
END PushChunk;
PROCEDURE PopChunk*(iff: IFFHandlePtr): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -90, D);
RETURN D.d[0]
END PopChunk;
PROCEDURE PropChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=type; D.d[1]:=id;
AmigaBase.LibCall(IFFLib, -114, D);
RETURN D.d[0]
END PropChunk;
PROCEDURE StopChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=type; D.d[1]:=id;
AmigaBase.LibCall(IFFLib, -126, D);
RETURN D.d[0]
END StopChunk;
PROCEDURE CollectionChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=type; D.d[1]:=id;
AmigaBase.LibCall(IFFLib, -138, D);
RETURN D.d[0]
END CollectionChunk;
PROCEDURE FindProp*(iff: IFFHandlePtr; type, id: LONGINT): StoredPropertyPtr;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=type; D.d[1]:=id;
AmigaBase.LibCall(IFFLib, -156, D);
RETURN SYSTEM.VAL(StoredPropertyPtr, D.d[0]);
END FindProp;
PROCEDURE FindCollection*(iff: IFFHandlePtr; type, id: LONGINT): CollectionItemPtr;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
D.d[0]:=type; D.d[1]:=id;
AmigaBase.LibCall(IFFLib, -162, D);
RETURN SYSTEM.VAL(CollectionItemPtr, D.d[0]);
END FindCollection;
PROCEDURE FindPropContext*(iff: IFFHandlePtr): ContextNodePtr;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -168, D);
RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]);
END FindPropContext;
PROCEDURE CurrentChunk*(iff: IFFHandlePtr): ContextNodePtr;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -174, D);
RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]);
END CurrentChunk;
PROCEDURE ParentChunk*(contextNode: ContextNodePtr): ContextNodePtr;
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, contextNode);
AmigaBase.LibCall(IFFLib, -180, D);
RETURN SYSTEM.VAL(ContextNodePtr, D.d[0]);
END ParentChunk;
PROCEDURE InitIFFasDOS*(iff: IFFHandlePtr);
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -234, D);
END InitIFFasDOS;
PROCEDURE InitIFFasClip*(iff: IFFHandlePtr);
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, iff);
AmigaBase.LibCall(IFFLib, -240, D);
END InitIFFasClip;
PROCEDURE OpenClipboard*(unit: LONGINT): ClipboardHandlePtr;
BEGIN
D.d[0]:=unit;
AmigaBase.LibCall(IFFLib, -246, D);
RETURN SYSTEM.VAL(ClipboardHandlePtr, D.d[0]);
END OpenClipboard;
PROCEDURE CloseClipboard*(clipHan: ClipboardHandlePtr);
BEGIN
D.a[0]:=SYSTEM.VAL(LONGINT, clipHan);
AmigaBase.LibCall(IFFLib, -252, D);
END CloseClipboard;
PROCEDURE TermProc;
BEGIN
D.a[1]:=IFFLib;
IF IFFLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, D) END
END TermProc;
BEGIN
IFFLib:=AmigaExec.OpenLibrary("iffparse.library", 0);
Amiga.TermProcedure(TermProc)
END AmigaIFFParse.